﻿using Sage.CloudStorage.Qiniu.Events;

namespace Sage.CloudStorage.Qiniu.Upload
{
    /// <summary>
    /// 上传选项配置类
    /// 提供各种上传行为的配置选项
    /// </summary>
    /// <remarks>
    /// 🔧 **配置说明**：
    /// - 所有选项都有合理的默认值
    /// - 可以根据具体场景灵活调整
    /// - 支持性能和稳定性的平衡配置
    /// </remarks>
    public class UploadOptions
    {
        /// <summary>
        /// 分片大小（字节），null表示自动选择
        /// </summary>
        /// <remarks>
        /// 自动选择策略：
        /// - 小文件（&lt;50MB）：2MB分片
        /// - 中等文件（50MB-500MB）：4MB分片
        /// - 大文件（500MB-2GB）：8MB分片
        /// - 超大文件（&gt;2GB）：16MB分片
        /// </remarks>
        public int? ChunkSize { get; set; }

        /// <summary>
        /// 单文件上传的最大并发数，默认3
        /// </summary>
        /// <remarks>
        /// 并发数建议：
        /// - 网络稳定：3-5个并发
        /// - 网络不稳定：1-2个并发
        /// - 高带宽环境：可适当增加到5-8个
        /// </remarks>
        public int MaxConcurrency { get; set; } = 3;

        /// <summary>
        /// 批量上传时的文件并发数，默认2
        /// </summary>
        /// <remarks>
        /// 批量并发建议：
        /// - 避免同时上传过多文件占用过多资源
        /// - 2-3个文件并发通常是较好的选择
        /// - 可以根据系统资源适当调整
        /// </remarks>
        public int BatchConcurrency { get; set; } = 2;

        /// <summary>
        /// 是否强制使用分片上传，默认false（自动判断）
        /// </summary>
        /// <remarks>
        /// 强制分片上传场景：
        /// - 测试分片上传功能
        /// - 需要进度监控的小文件
        /// - 特殊业务需求
        /// </remarks>
        public bool ForceMultipart { get; set; } = false;

        /// <summary>
        /// 进度回调函数
        /// 用于接收实时的上传进度信息
        /// </summary>
        public Action<UploadProgressEventArgs>? ProgressCallback { get; set; }

        /// <summary>
        /// 是否在控制台输出详细日志，默认true
        /// </summary>
        /// <remarks>
        /// 日志输出包括：
        /// - 文件信息和分片策略
        /// - 上传进度和状态
        /// - 错误信息和警告
        /// - 性能统计信息
        /// </remarks>
        public bool EnableConsoleLog { get; set; } = true;
    }
}
